# -*- coding: utf-8 -*-
from django import forms
from django.contrib.auth.models import User
from django.forms import ModelForm
from django.shortcuts import get_object_or_404
from django.utils.translation import ugettext_lazy as _
from localidades.models import Pais
from models import Usuario
from userena.contrib.umessages.models import Message
from userena.forms import SignupForm



class UsuarioForm(ModelForm):
    class Meta:
        #widgets = autocomplete_light.get_widgets_dict(Usuario)
        model = Usuario
        
mensaje_de_a_que_se_decida = u'Describa brevemente con que Especies trabaja, su campo de investigación, a que Institución pertenece...'

class SignupFormExtra(SignupForm):
    """
    A form to demonstrate how to add extra fields to the signup form, in this
    case adding the first and last name.


    """
    
    
    
    first_name = forms.CharField(label=_(u'First name'),
                                 max_length=30,
                                 required=False)

    last_name = forms.CharField(label=_(u'Last name'),
                                max_length=30,
                                required=False)
    
    pais = forms.ModelChoiceField(Pais.objects.all(),required = False,label=u'País')
    #label=_(u'A que se dedica como Experto?')
    registrarse_como_experto = forms.BooleanField(label=_(u'Registrarse como Experto?'),
                                                  required=False)
    descripcion_como_experto = forms.CharField(label=_(u'A que se dedica como Experto?'),
                                               widget=forms.Textarea(attrs={'placeholder':mensaje_de_a_que_se_decida}),
                                               required=False)

    def __init__(self, *args, **kw):
        """

        A bit of hackery to get the first name and last name at the top of the
        form instead at the end.

        """
        super(SignupFormExtra, self).__init__(*args, **kw)
        # Put the first and last name at the top
        new_order = self.fields.keyOrder[:-5]
        new_order.insert(0, 'first_name')
        new_order.insert(1, 'last_name')
        new_order.insert(2, 'registrarse_como_experto')
        new_order.insert(3, 'descripcion_como_experto')
        new_order.insert(4, 'pais')
        self.fields.keyOrder = new_order

    def clean(self):
        if self.cleaned_data['registrarse_como_experto']:
            if not self.cleaned_data['first_name']:
                msg = u"Si eligió registrarse como experto, debe completar su Nombre."
                self._errors['first_name'] = self.error_class([msg])
                del self.cleaned_data['first_name']
            if not self.cleaned_data['last_name']:
                msg = u"Si eligió registrarse como experto, debe completar su Apellido."
                self._errors['last_name'] = self.error_class([msg])
                del self.cleaned_data['last_name']
            if not self.cleaned_data['descripcion_como_experto']:
                msg = u"Si eligió registrarse como experto, debe completar A Que Se Dedica?."
                self._errors['descripcion_como_experto'] = self.error_class([msg])
                del self.cleaned_data['descripcion_como_experto']
            if not self.cleaned_data['pais']:
                msg = u"Si eligió registrarse como experto, debe completar el País."
                self._errors['pais'] = self.error_class([msg])
                del self.cleaned_data['pais']
            
        return self.cleaned_data
        
#        if self.cleaned_data['registrarse_como_experto']:
#            raise forms.ValidationError(_('ISSS CHECCCKED'))
#        

    

    
    def save(self):
        """
        Override the save method to save the first and last name to the user
        field.

        """
        # First save the parent form and get the user.
        new_user = super(SignupFormExtra, self).save()
        new_user.first_name = self.cleaned_data['first_name']
        new_user.last_name = self.cleaned_data['last_name']
        
        # enviar un mensaje para confirmar al administrador
        if self.cleaned_data['registrarse_como_experto']:
            usuario_administrador = get_object_or_404(User,is_superuser=True)
            usuario_send_list = [usuario_administrador]
            new_user.usuario.nombre = self.cleaned_data['first_name']
            new_user.usuario.apellido = self.cleaned_data['last_name']
            new_user.usuario.registrarse_como_experto = self.cleaned_data['registrarse_como_experto']
            new_user.usuario.descripcion_como_experto = self.cleaned_data['descripcion_como_experto']
            new_user.usuario.pais = self.cleaned_data['pais']
            new_user.usuario.save()
            new_user.save()
            body = 'Me registre como experto!'
            Message.objects.send_message(new_user,
                                               usuario_send_list,
                                               body)

        # Userena expects to get the new user from this form, so return the new
        # user.
        return new_user